#include <iostream>
#include <string>


namespace template_study
{   template<typename T>
    class Human{
        public:

        #if 0
            Human(const std::string&tmpname):m_name(tmpname)
            {
                std::cout<<"普通构造"<<std::endl;
            }

            //注意此处std::move并不具备移动能力，此处得std::move()的作用只是将传入的参数从左值转化成右值
            //此处的阿移动语义是由string类的移动构造函数完成的
            Human(std::string&&tmpname):m_name(std::move(tmpname)){


            }
        #endif
        //函数模板可以将上述的两个普通构造和移动语义构造合成一个
        Human(T&&tmpname):m_name(std::forward<T>(tmpname))
        {
            std::cout<<"完美转发"<<std::endl;

        }

        private:
            //std::string m_name;
            T m_name;

    };


} 
